iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 16
1
自我挑戰組

Ruby on Rails 新手的30個問題!系列 第 16

Day_16 devise strong_parameters & controller? (2)

  • 分享至 

  • xImage
  •  

嗨!各位朋友大家好,打給後,歹嘎吼,胎尬喉,我是阿圓,一樣有請今天的one piece:

(舊版七武海!)

昨天說完了 devise 的安裝,今天來說客製化的部分。
什麼意思呢?

假設我們昨天寫了rails g devise User,那devise預設只會幫你建兩個欄位emailpassword 如果你有其他了欄位要加,像是暱稱、個人簡介,那就要處理strong_parameters,而你也要在view裡新增你的表單欄位。

strong_parameters

因為devise預設的sing_insing_upaccount_update只有允許預設的欄位往後台送,所以要去增加permit的欄位。

做法

#在要更改強參數的controller裡
def configure_permitted_parameters
  devise_parameter_sanitizer.permit(:sign_in) do |user_params|
    user_params.permit(:username, :email)
  end
end	

直接將sign_in的user_params修改為usernameemail可通過

快速的做法:

class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?
# 這一行的意思是只有devise所生成的controller、才會在action前,執行configure_permitted_parameters

  protected
  def configure_permitted_parameters
# 若你的欄位設計成巢狀的,也可以這樣設定!
    devise_parameter_sanitizer.permit(:sign_up, 
      keys: [
        :first_name, :last_name, 
        address_attributes: [
          :country, :state, :city, :area, :postal_code
        ]
      ]
    )
  end
end

自定義 controller

你也可以把 controller 長出來後,去自定義你要做的事情

$ rails generate devise:controllers [:user]
# 其中 :user 可以換成你要連結的資料表(:admin 之類的)

此時,就會在app/controller/users/底下生出 sessions_controller.rb 這個檔案:

class Users::SessionsController < Devise::SessionsController
  # GET /resource/sign_in
  # def new
  #   super
  # end
  ...
end

還會很貼心地告訴你要去路徑做設定!

Running via Spring preloader in process 11485
      create  app/controllers/users/sessions_controller.rb
===============================================================================

Some setup you must do manually if you haven't yet:

  Ensure you have overridden routes for generated controllers in your routes.rb.
  For example:

    Rails.application.routes.draw do
      devise_for :users, controllers: {
        sessions: 'users/sessions'
      }
    end
===============================================================================

記得去routes.rb裡做設定

devise_for :users, controllers: { sessions: 'users/sessions' }

這樣就可以自定義出當使用者登入登出了時候要做什麼了~~

明天我們來說說 devise 的 view 跟 helper 吧!感謝各位看到這邊,若有任何建議,請各位不吝指教!我們明天見!


上一篇
Day_15 devise?
下一篇
Day_17 devise view? & helper?
系列文
Ruby on Rails 新手的30個問題!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言